package org.core.tliaswebmanagement.aop;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

@Slf4j
//@Aspect
@Component
public class MyAspect1 {
    /*
     * @Around: 环绕通知，在目标方法执行前和执行后执行。需要自己调用ProceedingJoinPoint.proceed()方法执行目标方法,其返回值必须为Object来接收原始方法返回值
     * @Before:  前置通知，在目标方法执行前执行
     * @After:  后置通知，在目标方法执行后执行,无论是否有异常
     * @AfterReturning: 返回通知，在目标方法正常返回后执行
     * @AftetThrowing: 异常通知，在目标方法抛出异常后执行
     *
     * @Pointcut: 将公共的切点表达式抽取出来，需要时直接引用表达式即可
     *
     * 当有多个切面的切入点匹配到了目标方法，目标方法运行时，多个通知方法均会执行
     */
    @Pointcut("execution(* org.core.tliaswebmanagement.service.impl.*.*(..))")
    public void pt(){}

    @Before("execution(* org.core.tliaswebmanagement.service.impl.*.*(..))")
    public void before(){
        log.info("MyAspect1 before");
    }

    @After("pt()")
    public void after(){
        log.info("MyAspect1 after");
    }
//
//    @AfterReturning("pt()")
//    public void afterReturning(){
//        log.info("MyAspect1 afterReturing");
//    }
//
//    @AfterThrowing("pt()")
//    public void afterThrowing(){
//        log.info("MyAspect1 afterThrowing");
//    }
}
